#include <iostream>

/* 复合类型的声明从右向左阅读，离变量名最近的符号对变量的类型有最直接的影响，
 * 此例中的&r, 因此r是一个引用。声明符的其余部分用以确定r引用的类型是什么。
 * 此例中的符号* 说明r引用的是一个指针。
 */
void con2_3_3() {
  int i = 42;
  int *p;         // p 是一个int型指针
  int *&r = p;    // r 是一个对指针p的引用

  r = &i;         // r 引用了一个指针，因此给r赋值&i就是令p指向i
  *r = 0;         // 解引用r得到i，也就是p指向的对象，将i的值改为0
}
int main(int argc, char *argv[])
{
  con2_3_3();
  return 0;
}
